import { getTokenForOssUpload } from "../api/common";
import OSS from "ali-oss";

// /**
//  *
//  * 获取当前时间的后一小时；
//  * 超过下午18点则返回第二天的上午9点；
//  *
//  */
// export function getNextHour() {
//   let date = new Date();
//   let hour = date.getHours();
//   if (hour >= 18) {
//     date.setDate(date.getDate() + 1);
//     date.setHours(9, 0, 0, 0);
//   } else if (hour > 14) {
//     date.setHours(18, 0, 0, 0);
//   } else {
//     date.setHours(date.getHours() + 2, 0, 0, 0);
//   }
//   return date;
// }

/**
 *
 * 获取当前时间的后一小时；
 * 超过下午18点则返回第二天的上午9点；
 *
 */
export function getBackWashNextHour() {
  let date = new Date();
  let hour = date.getHours();
  if (hour >= 11) {
    date.setDate(date.getDate() + 1);
    date.setHours(12, 0, 0, 0);
  } else {
    date.setHours(12, 0, 0, 0);
  }
  return date;
}

/**
 *
 * 获取当前时间的后一小时；
 * 超过下午18点则返回第二天的上午9点；
 *
 */
export function getNextHour() {
  let date = new Date();
  let hour = date.getHours();
  if (hour >= 18) {
    date.setDate(date.getDate() + 1);
    date.setHours(18, 0, 0, 0);
  } else {
    date.setHours(18, 0, 0, 0);
  }
  return date;
}

/**
 *
 *
 * 获取oss上传client
 *
 */
let credentials = null;
export function getOssClient() {
  return new Promise(async (resolve, reject) => {
    // 临时凭证过期时，才重新获取，减少对STS服务的调用。
    if (isCredentialsExpired(credentials)) {
      const res = await getTokenForOssUpload();
      credentials = {
        accessKeyId: res.data.accessKeyId,
        accessKeySecret: res.data.accessKeySecret,
        stsToken: res.data.securityToken,
        expiration: res.data.expiration,
      };
    }

    const client = new OSS({
      bucket: "shoeswasher",
      region: "oss-cn-heyuan",
      accessKeyId: credentials.accessKeyId,
      accessKeySecret: credentials.accessKeySecret,
      stsToken: credentials.securityToken,
    });
    resolve(client);
  });
}

/**
 * 判断临时凭证是否到期。
 **/
function isCredentialsExpired(credentials) {
  if (!credentials) {
    return true;
  }
  const expireDate = new Date(credentials.expiration);
  const now = new Date();
  // 如果有效期不足一分钟，视为过期。
  return expireDate.getTime() - now.getTime() <= 60000;
}

export const setStartOfDay = (date) => {
  const start = new Date(date);
  start.setHours(0, 0, 0, 0); // 将时间设置为 00:00:00
  return start.getTime(); // 返回时间戳
};

export const setEndOfDay = (date) => {
  const end = new Date(date);
  end.setHours(23, 59, 59, 999); // 将时间设置为 23:59:59
  return end.getTime(); // 返回时间戳
};
